这让我困惑了最后15分钟:
if ('ab' =~ /^a|b$/) { print 't' } else { print 'f' } print "\n";
我期望在开头之后跟随结尾的'a'或'b'应该只匹配一个字符.所以测试应该失败两个字符'ab'.但它成功了.为什么?
如果您对交替进行分组,那么您将获得预期的行为:
/^(a|b)$/
你的正则表达式会a
在字符串的开头(带^a
分支)或b
结尾(带b$
分支)找到一个.
使用时^(a|b)$
,锚点应用于整个组,因此它将匹配等于a
或的字符串b
.
另外,如果你不是真的需要捕捉的价值,你既可以使用非捕获组,/^(?:a|b)$/
或n
修改,/^(a|b)$/n
.